var fish; (function(p, M) {
    function G(l) {
        var f = function() {};
        f.prototype = l;
        return new f
    }
    function K(l, f, b) {
        if (f && l) {
            var q, k;
            for (k in f) if (null != (q = f[k]) || b) l[k] = q;
            return l
        }
    }
    var b, v = {
        anim: {
            v: "0.3",
            g: "201206110"
        },
        lazyLoad: {
            v: "0.2.1",
            g: "20120620"
        },
        template: {
            v: "0.2",
            g: "2013080101"
        }
    },
    w = {
        debug: "fwd.",
        product: "",
        branch: "product",
        baseUrl: function() {
            for (var l = document.getElementsByTagName("script"), f = l.length, b = baseUrl = ""; f--&&!(b = l[f].src, -1 < b.indexOf("fish.")););
            return (baseUrl = b.match(/.*(?=fish\.)/g)) ? baseUrl[0] + "module/": ""
        } (),
        fmJs: "{model}/{version}/{model}.{branch}js?v={generation}",
        fmCss: "{model}/{version}/{model}.css?v={generation}",
        combine: !0,
        spriteInterval: 0,
        fmCombineFn: function(l) {
            for (var f = 0,
            b = l.length; f < b; f++) l[f] = l[f].replace("https://security.40017.cn/cn/min/??", "");
            return "https://security.40017.cn/cn/min/??" + l.join(",")
        }
    }; [].forEach || (Array.prototype.forEach = function(l, b) {
        var n = this.length || 0,
        q = 0;
        if ("function" == typeof l) for (; q < n; q++) l.call(b, this[q], q, this)
    });
    Array.prototype.indexOf || (Array.prototype.indexOf = function(l) {
        var b, n;
        b = 0;
        for (n = this.length; b < n; b++) if (this[b] === l) return b;
        return - 1
    });
    var R = /^\s+/,
    S = /\s+$/;
    /\s/.test("\u00a0") || (R = /^[\s\xA0]+/, S = /[\s\xA0]+$/);
    var T = String.prototype.trim ?
    function(b) {
        return void 0 === b || "" === b ? "": String.prototype.trim.apply(b)
    }: function(b) {
        return void 0 === b || "" === b ? "": b.toString().replace(R, "").replace(S, "")
    },
    u; (function() {
        function l(b) {
            return T(b.replace(/\s+/g, " ")).split(" ")
        }
        var f = [],
        n = {},
        q = {
            js: {
                name: [],
                url: [],
                timer: null
            },
            css: {
                name: [],
                url: [],
                timer: null
            }
        },
        k = p.getElementsByTagName("script")[0],
        A = /{branch}/g,
        h = /{model}/g,
        I = /{generation}/g,
        s = /{version}/g;
        u = {
            STATE: {
                UNLOAD: 0,
                LOADING: 1,
                LOADED: 2
            },
            uList: v,
            execs: f,
            listener: n,
            load: function(y, x, n, h) {
                y = l(y).sort();
                var q = 0,
                t, s;
                if (x) {
                    var k = "_" + y.join("_") + "_";
                    f[k] || (f[f[f.length] = k] = []);
                    for (var E = 0,
                    p = y.length; E < p; E++) t = y[E],
                    b[t] && !b[t]._sprite_ && (q++, f[k][t] = !0);
                    f[k].push([x, n, h]);
                    f[k].num = y.length;
                    f[k].now = q;
                    if (y.length === q) {
                        _pipe.exec(k);
                        return
                    }
                }
                y.forEach(function(b) {
                    s = v[b];
                    u.state(b) < u.STATE.LOADING || u.state(b) === u.STATE.LOADED && fish[b]._sprite_ ? s.parent ? u.load(s.parent) : (_pipe.newElem("js", b, _pipe.parseUrl("fmJs", b, s)), s.css && _pipe.newElem("css", b, _pipe.parseUrl("fmCss", b, s)), u.state(b, u.STATE.LOADING), _pipe.eventExec(b, "loading")) : u.state(b) === u.STATE.LOADED && _pipe.exec(b)
                })
            },
            extend: function(b) {
                u.state(b, u.STATE.LOADED);
                _pipe.eventExec(b, "loaded");
                _pipe.exec(b)
            },
            on: function(b, l, f) {
                var h = n[b],
                h = h || {};
                h[l] = h[l] || [];
                h[l].push(f);
                n[b] = h
            },
            remove: function(b, l, f) {
                if (n[b] && n[b][l]) a: {
                    b = n[b][l];
                    for (l = b.length; l--;) if (b[l] === f) {
                        b.splice(l, 1);
                        break a
                    }
                }
            },
            state: function(b, f) {
                for (var h, n = l(b), q = 0, s = n.length; q < s; q++) if (h = n[q], v[h]) if (f) v[h].parent ? this.state(v[h].parent, f) : v[h].state = f;
                else return (h = v[h].parent ? this.state(v[h].parent) : v[h].state) ? h: this.STATE.UNLOAD
            }
        };
        _pipe = {
            exec: function(h) {
                for (var n, q, s, k = l(h).sort(), t, p = 0, A = k.length; p < A; p++) {
                    s = k[p];
                    for (t = f.length; t--;) if (h = f[t], -1 < h.indexOf("_" + s + "_") && !f[h][s] && (f[h][s] = !0, f[h].now++), f[h].now >= f[h].num) {
                        for (n = f[h]; q = n.shift();) setTimeout(function(b, l, f) {
                            return function() {
                                "function" === typeof b[0] ? b[2] ? b[0].apply(b[1] ? b[1] : f, b[2]) : b[0].apply(b[1] ? b[1] : f) : l[b[0]] && !l[b[0]]._sprite_ && l[b[0]].apply(b[1], b[2])
                            }
                        } (q, b, M), 0);
                        f.splice(t, 1);
                        f[h] = null
                    }
                }
            },
            parseUrl: function(b, l, f) {
                b = w[b].replace(h, l).replace(s, f.v).replace(I, f.g);
                return w.baseUrl + b.replace(A, w[w.branch])
            },
            eventExec: function(b, f) {
                for (var h, q, s = l(b), k, p = 0, A = s.length; p < A; p++) if (name = s[p], n[name] && n[name][f]) {
                    h = n[name][f];
                    for (k = h.length; q = h[--k];) q()
                }
            },
            newElem: function(b, l, f, h) {
                function n() {
                    var l, s = q[b].name.join(" "),
                    A = w.combine ? 1 < q[b].url.length ? w.fmCombineFn(q[b].url) : q[b].url[0] : f;
                    if (A) {
                        switch (b) {
                        case "css":
                            l = p.createElement("link");
                            l.rel = "stylesheet";
                            l.type = "text/css";
                            break;
                        case "js":
                            l = p.createElement("script"),
                            l.async = !0,
                            l.type = "text/javascript"
                        }
                        l.onreadystatechange = l.onload = function() {
                            var b = l.readyState;
                            if (!b || /loaded|complete/.test(b)) l.onreadystatechange = null,
                            "function" === typeof h && h(s)
                        };
                        switch (b) {
                        case "css":
                            l.href = A;
                            break;
                        case "js":
                            l.src = A
                        }
                        k.parentNode.insertBefore(l, k);
                        q[b].name = [];
                        q[b].url = [];
                        q[b].timer = null
                    }
                }
                w.combine ? (q[b].timer && clearTimeout(q[b].timer), q[b].timer = setTimeout(n, w.spriteInterval), q[b].name.push(l), q[b].url.push(f)) : n()
            }
        }
    })();
    var N = [],
    z = {
        cores: {},
        link: function() {
            for (var b = z.cores.sprite = z.sprite.fn,
            f = 0; f < N.length; f++) b = G(b),
            K(b, N[f].fn),
            z.cores[N[f].name] = b;
            return b
        },
        append: function(b, f) {
            z.cores[b] || (z.cores[b] = !0, N.push({
                name: b,
                fn: f
            }))
        },
        roe: function() {
            return G(z.cores.exec)
        },
        sprite: {
            init: function() {
                for (name in v) if (!this.fn[name] || this.fn[name] && !this.fn[name]._sprite_) this.fn[name] = function(b) {
                    var f = function() {
                        u.load(b, b, this, arguments)
                    };
                    f._sprite_ = !0;
                    return f
                } (name)
            },
            fn: {}
        },
        combine: function(b) {
            w.combine = b
        },
        branch: function(b) {
            null != w[b] && (w.branch = b)
        },
        config: function(b) {
            K(v, b);
            this.sprite.init()
        },
        pipe: u,
        extend: function(b, f, n) { (b = z.cores[b]) && K(b, f);
            var q;
            if (!n) for (q in f) u.extend(q)
        }
    };
    z.sprite.init();
    z.append("exec", {});
    b = fish = z.link();
    z.extend("exec", {
        guid: function() {
            var b = function() {
                return (65536 * (1 + Math.random()) | 0).toString(16).substring(1)
            };
            return b() + b() + "-" + b() + "-" + b() + "-" + b() + "-" + b() + b() + b()
        },
        lang: {
            extend: K,
            proto: G
        },
        extend: function(b, f) {
            z.extend("exec", b, f)
        },
        trim: T,
        require: function() {
            for (var b = arguments,
            f, n, q, k, p = 1; p < b.length; p++) switch (typeof b[p]) {
            case "string":
                switch (b[p]) {
                case "loaded":
                    f = "loaded";
                    break;
                case "ready":
                    f = "ready"
                }
                break;
            case "number":
                n = b[p];
                break;
            case "function":
                q = b[p]
            }
            k = function() {
                u.load(b[0], q)
            };
            if (n) setTimeout(function() {
                if (f) fish[f](k);
                else k()
            },
            n);
            else if (f) fish[f](k);
            else k()
        }
    });
    b.admin = z;
    b.inWater = !0; (function() {
        function b() {
            q || (q = !0, n("ready"))
        }
        function f() {
            b();
            old = !0;
            n("loaded")
        }
        function n(b) {
            if ("ready" === b) for (; k.length;) k.shift()();
            else if ("loaded" === b) for (; A.length;) A.shift()()
        }
        var q = old = !1,
        k = [],
        A = [];
        p.addEventListener ? (p.addEventListener("DOMContentLoaded", b, !1), M.addEventListener("load", f, !1)) : p.attachEvent && (function() {
            var f = p.documentElement;
            if (f.doScroll) try {
                f.doScroll("left");
                if (!p.body) throw "body has not ready";
                b()
            } catch(n) {
                setTimeout(arguments.callee, 10)
            }
        } (), M.attachEvent("onload", f));
        fish.extend({
            ready: function(b) {
                "function" === typeof b && (q ? b() : k.push(b))
            },
            loaded: function(b) {
                "function" === typeof b && (old ? b() : A.push(b))
            }
        },
        !0)
    })(); (function() {
        function l(a, c, g, d) {
            a: {
                var e, b = [];
                if (void 0 === c) e = p;
                else if (1 === c.nodeType || 9 === c.nodeType) e = c;
                else if (1 === c.length && 1 === c[0].nodeType) e = c[0];
                else {
                    c = void 0;
                    break a
                }
                if ("string" === typeof a && "" !== a) {
                    if (e && a) {
                        c = {
                            selectors: a,
                            context: e
                        };
                        break a
                    }
                } else {
                    if (a && (1 === a.nodeType || 9 === a.nodeType || a === M) && void 0 === c) {
                        b.push(a);
                        c = {
                            result: b
                        };
                        break a
                    }
                    if ("object" === typeof a && "function" !== typeof a && a.length && void 0 === c) {
                        d ? b.push(a[0]) : b = a;
                        c = {
                            result: b
                        };
                        break a
                    }
                }
                c = void 0
            }
            a = [];
            if (c) {
                if (c.selectors && c.context) return "querySelectorAll" === g ? (d ? (g = c.context.querySelector(c.selectors)) && a.push(g) : a = c.context.querySelectorAll(c.selectors), a) : c;
                if (c.result) return c.result
            }
        }
        function f(a, c) {
            var g, d = [],
            e,
            b = a,
            m = [];
            do
            if (c.exec(""), g = c.exec(b)) if (b = g[3], m.push(g[1]), g[2]) {
                e = g[3];
                break
            }
            while (g);
            return e ? ((0 === e.indexOf(",") || e.indexOf(",") === e.length - 1) && P.error(), d.concat([m], f(e, c))) : [m]
        }
        function n(a, c) {
            var g = a["#"],
            d = a.tag,
            e = a[":"],
            b = a["."];
            return g && !n.checkWithId(g, c) || d && !n.checkWithType(d, c) || e && !n.checkWithPseudo(e, c) || b && !n.checkWithClassName(b, c) ? !1 : !0
        }
        function q(a, c, g, d) {
            function e(a) {
                var c = [];
                for (a = a.firstChild; a;) 1 === a.nodeType && c.push(a),
                a = a.nextSibling;
                return c
            }
            function b(a, c) {
                var d = [];
                do
                if ((a = a.nextSibling) && 1 === a.nodeType) if (d.push(a), "+" === c) break;
                while (null !== a);
                return d
            }
            var m = c = 0,
            B, f = [];
            a = P.splitSelectors(a);
            var h = a["#"],
            l = a.tag,
            q = null,
            p = m = null;
            if (h && 1 < h.length) return f;
            for (; m = g[c]; c++) {
                switch (d) {
                case ">":
                    B = e(m);
                    q = a;
                    break;
                case "":
                    h ? (B = I(h[0], m), q = k(a, "#")) : (B = l ? s(l[0], m) : s("*", m), q = k(a));
                    break;
                case "+":
                    B = b(m, "+");
                    q = a;
                    break;
                case "~":
                    B = b(m),
                    q = a
                }
                for (m = 0; p = B[m]; m++) n(q, p) && f.push(p)
            }
            return f = y(f, "union")
        }
        function k(a, c) {
            var g = {
                ":": a[":"],
                ".": a["."],
                "[]": a["[]"]
            },
            d = g["."],
            e = [],
            b = 0,
            m;
            if (d.length) {
                for (; m = d[b]; b++) e.push(" " + m.substring(1) + " ");
                g["."] = e
            }
            switch (c) {
            case "#":
                g.tag = a.tag
            }
            return g
        }
        function A(a, c) {
            var g = a["#"],
            d = a.tag,
            e = a[":"],
            b = a["."],
            m = null,
            m = [];
            if (g) {
                if (1 < g.length) return m;
                m = k(a, "#");
                return h(g, c, m, "#")
            }
            if (d) return m = k(a),
            h(d, c, m, "tag");
            if (e) return m = k(a),
            h(e, c, m, ":");
            if (b) return m = k(a),
            h(b, c, m, ".")
        }
        function h(a, c, g, d) {
            var e = 0,
            b = [],
            m = [];
            switch (d) {
            case "#":
                b = I(a[0], c);
                break;
            case "tag":
                b = s(a[0], c);
                break;
            case ":":
                var B = a[0];
                c = s("*", c);
                b = 0;
                a = c.length;
                var f;
                d = [];
                switch (B) {
                case ":first-child":
                    for (; b !== a;) {
                        if ("html" !== c[b].nodeName.toLowerCase()) {
                            B = c[b];
                            for (f = B.previousSibling; null !== f && 1 !== f.nodeType;) f = f.previousSibling;
                            f || d.push(B)
                        }
                        b++
                    }
                    break;
                case ":last-child":
                    for (; b !== a;) {
                        if ("html" !== c[b].nodeName.toLowerCase()) {
                            B = c[b];
                            for (f = B.nextSibling; null !== f && 1 !== f.nodeType;) f = f.nextSibling;
                            f || d.push(B)
                        }
                        b++
                    }
                }
                b = d;
                break;
            case ".":
                if (1 < a.length) b = s("*", c);
                else {
                    b = a[0];
                    c = c.getElementsByTagName("*");
                    b = " " + b.substring(1) + " ";
                    a = [];
                    for (B = c.length; B--;) d = " " + c[B].className + " ",
                    -1 < d.indexOf(b) && a.unshift(c[B]);
                    b = a
                }
            }
            for (; c = b[e]; e++) n(g, c) && m.push(c);
            return m
        }
        function I(a, c) {
            var g = null,
            d = []; (g = document.getElementById(a.substring(1))) && d.push(g);
            return d
        }
        function s(a, c) {
            var g = c.getElementsByTagName(a);
            if ("*" === a) {
                for (var d = [], b = 0, r = g.length; b !== r;) 1 === g[b].nodeType && d.push(g[b]),
                b++;
                return d
            }
            return g
        }
        function y(a, c) {
            var g = [],
            d = !1,
            b,
            r,
            m;
            if (1 === a.length) return a;
            for (; a.length;) {
                r = a.shift();
                m = a.length;
                for (b = 0; b < m;) r === a[b] && (a.splice(b, 1), b--, d = !0),
                b++; ! d && "diff" === c ? g.push(r) : d && "same" === c ? g.push(r) : "union" === c && g.push(r);
                d = !1
            }
            return g
        }
        function x(a, c) {
            for (var g = 0,
            d = c.length; g != d; g++) a[g] = c[g];
            a.length = d;
            return a
        }
        function u(a, c, g) {
            var d = a;
            "function" == typeof a && (d = a.call(c, g));
            return d
        }
        function X(a, c) {
            if ("string" == typeof a) {
                var g;
                g = c.children[0] ? c.children[0].tagName || void 0 : {
                    UL: "LI",
                    DL: "DT",
                    TR: "TD"
                } [c.tagName] || c.tagName;
                g = document.createElement({
                    LI: "UL",
                    DT: "DL",
                    DD: "DL",
                    TR: "TBODY",
                    TD: "TR"
                } [g] || "div");
                g.innerHTML = a;
                return g
            }
            g = document.createElement("div");
            g.appendChild(a);
            return g
        }
        function z(a) {
            var c, g = [],
            d,
            e = G.length;
            K.innerHTML = "<div style='" + a + "'></div>";
            for (c = K.childNodes[0].style; e--;) if (d = c[G[e]]) g[g[g.length] = G[e]] = d;
            a = a.replace(/-([a-z])/g,
            function(a, c) {
                return c.toUpperCase()
            });
            a = a.split(";");
            for (e = 0; e < a.length; e++) c = a[e].split(":"),
            c[0] && -1 === N.indexOf(" " + b.trim(c[0].toLowerCase() + " ")) && (d = b.trim(c[0]), g[g[g.length] = d] = b.trim(c[1]));
            return g
        }
        function t(a) {
            var c = /\S/;
            a.each(function(a) {
                for (var d = a.firstChild,
                b = -1,
                r; d;) {
                    r = d.nextSibling;
                    if (3 == d.nodeType && !c.test(d.nodeValue)) try {
                        a.removeChild(d)
                    } catch(m) {
                        d = r;
                        continue
                    } else null != d.nodeIndex && (d.nodeIndex = ++b);
                    d = r
                }
            })
        }
        function v(a) {
            var c = a.charAt(0);
            return "." === c ? (a = a.substring(1),
            function(c) {
                return b.one(c).hasClass(a)
            }) : "#" === c ? (a = a.substring(1),
            function(c) {
                return c.id === a
            }) : function(c) {
                return c.tagName.toLowerCase() === a
            }
        }
        function w(a, c, b) {
            var d = /\s(\d+):?(\d+)?:?(\d+)?/,
            e;
            if ("object" === typeof a && null !== a) var d = a.getFullYear(),
            r = a.getMonth() + 1,
            m = a.getDate(),
            f = a.getHours(),
            C = a.getMinutes(),
            h = a.getSeconds();
            else a = a ? a: "",
            e = d.exec(a),
            h = a.split("-"),
            d = parseInt(h[0], 10),
            r = parseInt(h[1], 10),
            m = parseInt(h[2], 10),
            h = C = f = 0,
            e && (e[1] && (f = parseInt(e[1], 10)), e[2] && (C = parseInt(e[2], 10)), e[3] && (h = parseInt(e[3], 10)));
            var l = new Date;
            e = {
                years: 0,
                months: 0,
                days: 0,
                hours: 0,
                minutes: 0,
                seconds: 0,
                timeMode: null
            };
            if (d && r && m) return fish.lang.extend(e, c),
            d += e.years,
            r += e.months,
            m += e.days,
            f += e.hours,
            C += e.minutes,
            h += e.seconds,
            h = new Date(d, r - 1, m, f, C, h),
            d = h.getFullYear(),
            r = h.getMonth() + 1,
            m = h.getDate(),
            f = h.getHours(),
            C = h.getMinutes(),
            h = h.getSeconds(),
            r = 10 > r ? "0" + r: r,
            m = 10 > m ? "0" + m: m,
            f = 10 > f ? "0" + f: f,
            C = 10 > C ? "0" + C: C,
            h = 10 > h ? "0" + h: h,
            e = e.timeMode ? e.timeMode.replace("YYYY", d).replace("MM", r).replace("DD", m).replace("hh", f).replace("mm", C).replace("ss", h) : [d, r, m].join("-"),
            e = b ? {
                y: d,
                m: r,
                d: m,
                h: f,
                mi: C,
                s: h
            }: e;
            if (!arguments.callee.hasCallOnce) return arguments.callee.hasCallOnce = !0,
            arguments.callee([l.getFullYear(), l.getMonth() + 1, l.getDate()].join("-"), c, b)
        }
        function E() {
            var a = document.body,
            c = document.createElement("div"),
            b,
            d,
            e;
            b = {
                position: "absolute",
                top: 0,
                left: 0,
                margin: 0,
                border: 0,
                width: "1px",
                height: "1px",
                visibility: "hidden"
            };
            for (d in b) c.style[d] = b[d];
            c.innerHTML = "<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";
            a.insertBefore(c, a.firstChild);
            b = c.firstChild;
            d = b.firstChild;
            e = b.nextSibling.firstChild.firstChild;
            this.doesNotAddBorder = 5 !== d.offsetTop;
            this.doesAddBorderForTableAndCells = 5 === e.offsetTop;
            d.style.position = "fixed";
            d.style.top = "20px";
            this.supportsFixedPosition = 20 === d.offsetTop || 15 === d.offsetTop;
            d.style.position = d.style.top = "";
            b.style.overflow = "hidden";
            b.style.position = "relative";
            this.subtractsBorderForOverflowNotVisible = -5 === d.offsetTop;
            this.doesNotIncludeMarginInBodyOffset = 0 !== a.offsetTop;
            a.removeChild(c)
        }
        n.checkWithId = function(a, c) {
            a = a[0].substring(1);
            return c.id === a ? !0 : !1
        };
        n.checkWithType = function(a, c) {
            a = a[0];
            return c.nodeName.toLowerCase() === a || "*" === a ? !0 : !1
        };
        n.checkWithPseudo = function(a, c) {
            for (var b = 0,
            d, e, r = 0; d = a[b]; b++) switch (e = c, d) {
            case ":first-child":
                do {
                    if (e.previousSibling && 1 === e.previousSibling.nodeType) {
                        r--;
                        break
                    }
                    e = e.previousSibling
                } while ( null !== e );
                e || r++;
                break;
            case ":last-child":
                do {
                    if (e.nextSibling && 1 === e.nextSibling.nodeType) {
                        r--;
                        break
                    }
                    e = e.nextSibling
                } while ( null !== e );
                e || r++
            }
            return 0 < r ? !0 : !1
        };
        n.checkWithClassName = function(a, c) {
            var b = 0,
            d, e = c.className;
            if (0 === e.length) return ! 1;
            for (e = " " + e + " "; d = a[b]; b++) if (0 > e.indexOf(d)) return ! 1;
            return ! 0
        };
        n.checkWithAttribute = function(a, c) {};
        var P = {
            match: {
                type: /^(?:[a-z]+[1-6]?|[*])/g,
                id: /#-*[_a-zA-Z][-_a-zA-Z0-9]*/g,
                className: /\.-*[_a-zA-Z][-_a-zA-Z0-9]*/g,
                pseudo: /:(?:(?:first|last)-child|lang\(\s*[a-z]{2,2}(?:-[a-zA-Z]{2,2})?\s*\))/g,
                attribute: /\[\s*-*[_a-zA-Z][-_a-zA-Z0-9]*(?:\s*[~|]?=\s*(?:(['"])[^'"]+\1|-*[_a-zA-Z][-_a-zA-Z0-9]*))?\s*\]/g,
                specialAttributeMap: {
                    "class": "className",
                    "for": "htmlFor"
                }
            },
            relation: /[>+~](?!=|.*["'])/g,
            isCombinatorValid: function(a) {
                var c = this.relation,
                b = a.length,
                d, e, r;
                for ((c.test(a[0].charAt(0)) || c.test(a[b - 1].charAt(a[b - 1].length - 1))) && this.error(); b--;) d = a[b],
                e = a[b - 1],
                r = a[b + 1],
                c.test(d) && (c.test(e) || c.test(r)) && this.error()
            },
            splitSelectors: function(a) {
                var c = a.match(this.match.id) || "",
                b = a.match(this.match.type) || "",
                d = a.match(this.match.className) || "",
                e = a.match(this.match.pseudo) || "",
                r = a.match(this.match.attribute) || "",
                m = a.match(this.relation) || ""; ((c.length ? c.join("") : c) + (b.length ? b.join("") : b) + (d.length ? d.join("") : d) + (e.length ? e.join("") : e) + (r.length ? r.join("") : r) + (m.length ? m.join("") : m)).length !== a.length && P.error();
                return {
                    "#": c,
                    tag: b,
                    ".": d,
                    ":": e,
                    "[]": r,
                    rel: m
                }
            },
            error: function() {
                throw Error("\u9009\u62e9\u5668\u8bed\u6cd5\u9519\u8bef\uff01");
            }
        },
        U = p.querySelectorAll && p.getElementsByClassName ?
        function(a, c, g) {
            var d = b.admin.roe();
            a = l(a, c, "querySelectorAll", g);
            return ! a || 0 === a.length ? (d.length = 0, d) : x(d, a)
        }: function(a, c, g) {
            var d = b.admin.roe(),
            e = 0,
            r,
            m,
            h = [];
            if (c = l(a, c, void 0, g)) if (c.selectors && c.context) a = c.context,
            c = c.selectors;
            else return x(d, c);
            else return d.length = 0,
            d;
            c = f(c, /((?::[-a-z]+(?:\([-a-zA-z]+\))?|\[(?:[^\[\]'"]+|['"][^'"]*['"])+\]|[^ >+~,\[\]():]+)+|[>+~])(\s*,\s*)?((?:.)*)/g);
            for (r = c.length; e !== r; e++) P.isCombinatorValid(c[e]);
            for (e = 0; e !== r; e++) {
                a: {
                    m = c[e];
                    for (var C = a,
                    n = void 0,
                    s = void 0,
                    s = void 0,
                    p = m.length,
                    k = 0,
                    O = []; k !== p;) {
                        n = m[k];
                        s = P.splitSelectors(n);
                        if (0 === k) O = A(s, C);
                        else if (s = "string" === typeof s.rel ? s.rel: s.rel[0], "" !== s && (n = m[++k]), O = q(n, C, O, s), 0 === O.length) {
                            m = O;
                            break a
                        }
                        k++
                    }
                    m = O
                }
                h = h.concat(m)
            }
            g && (h = h[0] ? [h[0]] : h);
            return 1 === r ? x(d, h) : x(d, y(h, "union"))
        },
        K = document.createElement("div"),
        N = " webkittransform otransform mstransform moztransform ",
        G = ["webkitTransform", "OTransform", "msTransform", "MozTransform"],
        V = {
            remove: function(a) {
                a.parentNode.removeChild(a)
            },
            outer: function(a, c) {
                c.parentNode.replaceChild(a, c)
            },
            top: function(a, c) {
                c.insertBefore(a, c.firstChild)
            },
            bottom: function(a, c) {
                c.insertBefore(a, null)
            },
            before: function(a, c) {
                c.parentNode.insertBefore(a, c)
            },
            after: function(a, c) {
                c.parentNode.insertBefore(a, c.nextSibling)
            }
        },
        L = {},
        D = {
            hook: "fish" + (Math.random() + "").replace(/\D/, ""),
            id: 1
        },
        W = {},
        R = function() {
            return p.dispatchEvent ?
            function(a, c, g) {
                var d = document.createEvent("HTMLEvents");
                b.lang.extend(d, g);
                d.initEvent(c, !0, !0);
                a.dispatchEvent(d)
            }: function(a, c, g) {
                var d = document.createEventObject();
                b.lang.extend(d, g);
                a.fireEvent("on" + c, d)
            }
        } (),
        F = {
            splice: [].splice,
            all: function(a, c) {
                return U(a, c)
            },
            dom: function(a, c) {
                return U(a, c, !0)[0] || null
            },
            one: function(a, c) {
                return U(a, c, !0)
            },
            isElement: function(a, c) {
                return 1 === a.nodeType && (void 0 === c ? !0 : a.tagName.toLowerCase() === c)
            },
            getParent: function(a) {
                var c = this[0];
                if (c) {
                    do
                    if ((c = c.parentNode) && fish.all(c).hasClass(a.substring(1))) return fish.all(c);
                    while (null !== c)
                }
                a = b.admin.roe();
                a.length = 0;
                return a
            },
            parent: function(a) {
                function c(a) {
                    for (var c = 0; c < d && g[c] !== a; c++);
                    c === d && (g[d++] = a)
                }
                if (0 === this.length) return this;
                var g = b.admin.roe(),
                d = 0,
                e;
                g.length = 0;
                "string" === typeof a && ("" !== a && !/\s+/.test(a)) && (a = v(a));
                if (void 0 === a) e = function(a) {
                    a.parentNode && c(a.parentNode)
                };
                else if ("number" === typeof a) e = function(a, d) {
                    for (var b = 0; b < d && a; b++) a = a.parentNode;
                    a && c(a)
                };
                else if ("function" === typeof a) e = function(a, d) {
                    for (a = a.parentNode; a && !d(a);) a = a.parentNode;
                    a && c(a)
                };
                else return g;
                this.each(function(c, d) {
                    e(c, a)
                });
                g.length = d;
                return g
            },
            add: function(a) {
                var c = this.length;
                if (b.isElement(a)) this[c++] = a;
                else if (a.length) for (var g = 0,
                d = a.length; g < d; g++) b.isElement(a[g]) && (this[c++] = a[g]);
                this.length = c;
                return this
            },
            clear: function(a, c) {
                function b(a, c) {
                    var g = d(a, c),
                    e = g,
                    r = a.length;
                    if ( - 1 < g) {
                        for (; e < r - 1;) a[e] = a[e + 1],
                        e++;
                        a.length--
                    }
                }
                function d(a, c) {
                    var d = -1;
                    c = fish.dom(c);
                    a.each(function(a, b) {
                        if (this == c) return d = b,
                        !1
                    });
                    return d
                }
                if (0 == arguments.length) {
                    for (var e = this.length; e--;) delete this[e];
                    this.length = 0;
                    delete this.object;
                    return this
                }
                c = c ? c: this;
                var r = null,
                e = null;
                if ("function" === typeof a) r = a,
                c.each(function() {
                    r() && b(c, this)
                });
                else if ("string" === typeof a || "object" === typeof a && a.inWater || "object" === typeof a && 1 === a.nodeType) e = fish.all(a),
                e.each(function() {
                    b(c, this)
                })
            },
            each: function(a) {
                for (var c = 0,
                b = this.length; c < b && !1 !== a.call(this[c], this[c], c, this); ++c);
                return this
            },
            hasClass: function(a) {
                if (!a || !this[0]) return ! 1;
                for (var c, g, d = 0; d < this.length; d++) {
                    g = b.trim(u(a, this[d], d)).split(/\s+/);
                    c = " " + b.trim(this[d].className) + " ";
                    for (var e = g.length; e--;) if ( - 1 === c.indexOf(" " + g[e] + " ")) return ! 1
                }
                return ! 0
            },
            addClass: function(a) {
                for (var c, g, d = 0; d < this.length; d++) {
                    c = b.trim(u(a, this[d], d)).split(/\s+/);
                    g = " " + b.trim(this[d].className) + " ";
                    for (var e = 0,
                    r = c.length; e < r; e++)~g.indexOf(" " + c[e] + " ") || (g += c[e] + " ");
                    this[d].className = b.trim(g)
                }
                return this
            },
            removeClass: function(a) {
                for (var c, g, d = 0; d < this.length; d++) {
                    c = b.trim(u(a, this[d], d)).split(/\s+/);
                    g = " " + b.trim(this[d].className) + " ";
                    for (var e = 0; e < c.length; e++) g = g.replace(" " + c[e] + " ", " ");
                    this[d].className = b.trim(g)
                }
                return this
            },
            replaceClass: function(a, c) {
                if ("string" !== typeof a || "string" !== typeof c || /^\s*$/.test(a)) return this;
                var b = RegExp("(^|\\s+)" + a + "(\\s+|$)");
                this.each(function() {
                    this.className && (this.className = this.className.replace(b, "$1" + c + "$2"))
                });
                return this
            },
            toggleClass: function(a) {
                this.each(function(c) {
                    c = b.one(c);
                    c.hasClass(a) ? c.replaceClass(a, "") : (c = c[0], c.className = c.className + " " + a)
                });
                return this
            },
            contains: function(a, c) {
                var b = p.documentElement;
                if (b.contains || b.compareDocumentPosition) {
                    var b = 9 === a.nodeType ? a.documentElement: a,
                    d = c && c.parentNode;
                    return a === d || !(!d || !(1 === d.nodeType && (b.contains ? b.contains(d) : a.compareDocumentPosition && a.compareDocumentPosition(d) & 16)))
                }
                if (c) for (; c = c.parentNode;) if (a === c) return ! 0;
                return ! 1
            },
            indexOf: function(a) {
                for (var c = 0,
                b = this.length; c < b; c++) if (this[c] === a) return c;
                return - 1
            },
            data: function(a, c) {
                if (this.length) {
                    for (var g, d, e = 0,
                    r = this.length; e < r; e++) {
                        g = this[e]; (d = g[D.hook]) || (d = g[D.hook] = D.id++); (g = W[d]) || (g = W[d] = {});
                        if (void 0 === a) return g;
                        if ("object" === typeof a) b.lang.extend(g, a);
                        else if ("string" === typeof a) {
                            if (void 0 === c) return g[a];
                            g[a] = c
                        }
                    }
                    return this
                }
            },
            removeData: function(a) {
                if (this.length) {
                    for (var c, b, d = 0,
                    e = this.length; d < e; d++) if (c = this[d], c = c[D.hook])(b = W[c]) && ("string" === typeof a ? delete b[a] : a.forEach && a.forEach(function(a) {
                        delete b[a]
                    }));
                    return this
                }
            },
            on: function(a, c, g) {
                if (!c) return this;
                var d, e;
                null != this.length ? (d = this, g && (e = !0)) : d = fish.all(g);
                if (0 === d.length) return this;
                var r = function() {
                    if (d[0].addEventListener) return function(a, c, b) {
                        a.addEventListener(c, b, !1)
                    };
                    if (d[0].attachEvent) return function(a, c, b) {
                        a.attachEvent("on" + c, b)
                    }
                } ();
                d.each(function(d, f) {
                    var h = function(a) {
                        return function(d) {
                            if (e) {
                                var r = b.all(g, a);
                                d = b.getEvent(d);
                                for (var m = b.getTarget(d); m && m !== a;) {
                                    if ( - 1 !== r.indexOf(m)) {
                                        d.delegateTarget = m;
                                        c.apply(a, [d]);
                                        break
                                    }
                                    m = m.parentNode
                                }
                            } else c.apply(a, [d])
                        }
                    } (d);
                    h[D.hook] = [c, g];
                    var l = d[D.hook],
                    n;
                    l || (l = d[D.hook] = D.id++); (n = D[l]) || (n = D[l] = {});
                    n[a] || (n[a] = []);
                    n[a].push(h);
                    r(d, a, h)
                });
                return this
            },
            off: function(a, c, b) {
                if (!c) return this;
                var d = null != this.length ? this: fish.all(b);
                if (0 === d.length) return this;
                var e = function() {
                    if (d[0].addEventListener) return function(a, c, b) {
                        a.removeEventListener(c, b, !1)
                    };
                    if (d[0].attachEvent) return function(a, c, b) {
                        a.detachEvent("on" + c, b)
                    }
                } ();
                d.each(function(d, m) {
                    var f = d[D.hook],
                    h;
                    if (f && (f = D[f]) && (f = f[a])) {
                        for (h = f.length; h--;) if (f[h][D.hook][0] === c && f[h][D.hook][1] === b) {
                            e(d, a, f[h]);
                            break
                        } - 1 !== h && f.splice(h, 1)
                    }
                });
                return this
            },
            delegate: function(a, c, b) {
                return 0 === this.length ? this: this.on(c, b, a)
            },
            undelegate: function(a, c, b) {
                return this.off(c, b, a)
            },
            trigger: function(a, c) {
                this.each(function(b) {
                    R(b, a, c)
                });
                return this
            },
            hover: function(a, c) {
                for (var g, d = 0; d < this.length; d++) g = this[d],
                function(d) {
                    b.on("mouseover",
                    function(c) {
                        var g = b.getRelated(c); (!g || d !== g && !b.contains(d, g)) && a && a.call(d, c)
                    },
                    d);
                    b.on("mouseout",
                    function(a) {
                        var g = b.getRelated(a); (!g || d !== g && !b.contains(d, g)) && c && c.call(d, a)
                    },
                    d)
                } (g)
            },
            ajax: function(a) {
                function c() {
                    if (4 == e.readyState && (200 <= e.status && 300 >= e.status || 304 == e.status)) {
                        clearTimeout(a.timer);
                        var c = e.responseText;
                        "json" === f && (c = (new Function("return " + c))());
                        h && h(c);
                        a.cache && (L[k] = c)
                    } else 4 == e.readyState && (clearTimeout(a.timer), p || (l && l(), p = !0))
                }
                function b(a, c) {
                    var d = a;
                    c && (0 > a.indexOf("?") ? d += "?": "?" != a.charAt(a.length - 1) && (d += "&"), d += c);
                    return d
                }
                function d() {
                    e.setRequestHeader("X-Requested-With", "XMLHttpRequest");
                    if (a.headers) for (var c in a.headers) e.setRequestHeader(c, a.headers[c])
                }
                var e = window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest,
                f = a.type ? a.type: "string",
                m = a.openType ? a.openType: "get",
                h = a.fn,
                l = a.err,
                n = a.onTimeout,
                s = !0 === a.sync ? !1 : !0,
                q = a.timeout ? a.timeout: 16E3,
                p = !1,
                k = a.url,
                x;
                if (k) {
                    0 < k.indexOf("#") && (k = k.substring(0, k.indexOf("#")));
                    0 < k.indexOf("?") && k.indexOf("?") == k.length - 1 && (k = k.substring(0, k.indexOf("?")));
                    var A = !1,
                    E = !1,
                    u = !1;
                    if ("jsonp" === a.type) {
                        var k = b(k, a.data),
                        A = !0,
                        y = a.jsonpCallback ? a.jsonpCallback: "tc" + parseInt(1E11 * Math.random());
                        x = b(k, ("string" === typeof a.jsonp && "" !== a.jsonp ? a.jsonp: "callback") + "=" + y);
                        if (a.jsonpCallback) if (a.cache) {
                            if (void 0 !== L[k]) {
                                window[y](L[k]);
                                return
                            }
                        } else x += "&iid=" + (new Date).getTime();
                        var I = window[y];
                        window[y] = function(c) {
                            E || (h && h(c), I ? (I(c), window[y] = I) : window[y] = void 0, a.cache && void 0 === L[k] && (L[k] = c), clearTimeout(a.timer))
                        };
                        var t = document.createElement("script");
                        t.type = "text/javascript";
                        t.src = x;
                        t.async = s;
                        document.getElementsByTagName("head")[0].appendChild(t)
                    } else if ("script" === a.type) k = b(k, a.data),
                    t = document.createElement("script"),
                    t.type = "text/javascript",
                    t.onreadystatechange = t.onload = function() {
                        var a = t.readyState;
                        if (!a || /loaded|complete/.test(a)) t.onreadystatechange = t.onload = null,
                        h && "function" === typeof h && h()
                    },
                    t.src = k,
                    t.async = s,
                    document.getElementsByTagName("head")[0].appendChild(t);
                    else if ("get" === m) {
                        k = b(k, a.data);
                        u = !0;
                        x = k;
                        if (a.cache) {
                            if (void 0 !== L[k]) {
                                a.fn && a.fn(L[k]);
                                return
                            }
                        } else x = b(k, "iid=" + Math.random());
                        e.open(m, x, s);
                        e.onreadystatechange = c;
                        d();
                        // e.send(null)
                    } else "post" === m && (u = !0, e.open(m, k, s), e.onreadystatechange = c, e.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"), d(), e.send(a.data));
                    a.timer = setTimeout(function() {
                        u && 4 !== e.readyState && (n && n(), e.abort(), p || (l && l(), p = !0));
                        A && !p && (l && l(), p = E = !0)
                    },
                    q);
                    return e
                }
            },
            getEvent: function(a) {
                return a ? a: M.event
            },
            getTarget: function(a) {
                a = b.getEvent(a);
                return a.target || a.srcElement
            },
            stopBubble: function(a) {
                a = b.getEvent(a);
                a.stopPropagation ? a.stopPropagation() : a.cancelBubble = !0
            },
            getRelated: function(a) {
                a = b.getEvent(a);
                switch (a.type) {
                case "mouseover":
                    return a.relatedTarget || a.fromElement;
                default:
                    return a.relatedTarget || a.toElement
                }
            },
            preventDefault: function(a) {
                a = b.getEvent(a);
                a.preventDefault ? a.preventDefault() : a.returnValue = !1
            },
            getKeyCode: function(a) {
                a = b.getEvent(a);
                return a.keyCode ? a.keyCode: a.which ? a.which: a.charCode
            },
            valida: {
                email: function(a) {
                    return /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,6})+$/.test(b.trim(a))
                },
                phone: function(a) {
                    return /^(13|14|15|17|18)[0-9]{9}$/.test(b.trim(a))
                }
            },
            css: function() {
                function a(a) {
                    var b = "";
                    if ("string" === typeof a) b = a;
                    else if ("object" === typeof a) for (var d in a) a.hasOwnProperty(d) && (b += d + ":" + a[d] + ";");
                    var e = z(b);
                    return this.each(function(a) {
                        for (var c = e.length; c--;) a.style[e[c]] = e[e[c]]
                    })
                }
                a.normalize = z;
                return a
            } (),
            getCss: function(a) {
                return this[0] && (this[0].currentStyle ? this[0].currentStyle[a] : p.defaultView.getComputedStyle(this[0], null).getPropertyValue(a))
            },
            cookie: {
                set: function(a, c, b) {
                    var d = a;
                    if ("string" === typeof a) {
                        var e = arguments,
                        d = {};
                        d.name = e[0];
                        d.value = e[1];
                        d.days = e[2];
                        d.path = e[3];
                        d.domain = e[4];
                        d.encode = e[5]
                    }
                    if (null != d.value) {
                        e = new Date;
                        d.days && e.setDate(e.getDate() + parseInt(d.days, 10));
                        d.hours && e.setHours(e.getHours() + parseInt(d.hours, 10));
                        d.minutes && e.setMinutes(e.getMinutes() + parseInt(d.minutes, 10));
                        d.seconds && e.setSeconds(e.getSeconds() + parseInt(d.seconds, 10));
                        var e = !d.days && !d.hours && !d.minutes && !d.seconds ? "": "; expires=" + e.toGMTString(),
                        f = d.value; ! 1 != d.encode && (f = encodeURIComponent(d.value));
                        e = d.name + "=" + f + e;
                        d.path && (e += ";path=" + d.path);
                        d.domain && (e += ";domain=" + d.domain);
                        p.cookie = e
                    }
                },
                get: function(a, c) {
                    if (p.cookie && "" != p.cookie) {
                        var g, d;
                        d = null;
                        for (var e = document.cookie.split(";"), f = 0; f < e.length; f++) {
                            var m = b.trim(e[f]);
                            if (m.substring(0, a.length + 1) == a + "=") {
                                if (c) d = m.substring(a.length + 1);
                                else try {
                                    d = decodeURIComponent(m.substring(a.length + 1))
                                } catch(h) {
                                    d = ""
                                }
                                break
                            }
                        }
                        if (d) try {
                            g = decodeURIComponent(d)
                        } catch(l) {
                            g = d
                        }
                        if (c && d) {
                            d = d.split("&");
                            g = null;
                            for (f = 0; f < d.length; f++) if (d[f] = b.trim(d[f]), d[f].substring(0, c.length + 1) == c + "=") {
                                try {
                                    g = decodeURIComponent(d[f].substring(c.length + 1))
                                } catch(k) {
                                    g = ""
                                }
                                break
                            }
                        }
                        return g
                    }
                },
                remove: function(a, c) {
                    var g = b.cookie.get(a);
                    void 0 !== g && null !== g && (g = {
                        name: a,
                        value: "",
                        days: -1
                    },
                    b.lang.extend(g, c), b.cookie.set(g))
                }
            },
            attr: function(a, c) {
                return null != c ? (this.each(function(b) {
                    b.setAttribute(a, c)
                }), this) : this[0] && this[0].getAttribute(a)
            },
            removeAttr: function(a) {
                this.each(function(c) {
                    c.removeAttribute(a)
                });
                return this
            },
            prop: function(a, c) {
                return ! this.length ? this: void 0 !== c ? (this.each(function(b) {
                    b[a] = c
                }), this) : this[0] && this[0][a]
            },
            val: function(a) {
                return null != a ? (this.each(function(c) {
                    c.value = a
                }), this) : this[0] && this[0].value
            },
            effect: function(a) {
                function c(a) {
                    a["_effect_" + h + "_"] = !0
                }
                function g() {
                    "none" === l.getCss("display") && (m.interFn && m.interFn.call(l), m.interShow && l.css("display:block"))
                }
                function d() {
                    "block" === l.getCss("display") && (m.outerFn && m.outerFn.call(l), m.outerHide && l.css("display:none"))
                }
                function e() {
                    clearTimeout(k);
                    k = setTimeout(g, 0)
                }
                function f() {
                    clearTimeout(k);
                    k = setTimeout(d, 0)
                }
                var m = {
                    elem: "",
                    type: "click",
                    interShow: !0,
                    outerHide: !0,
                    interFn: null,
                    outerFn: null
                };
                b.lang.extend(m, a);
                var h = b.guid(),
                l = this;
                a = b.all(m.elem);
                var k;
                a.each(c);
                this.each(c);
                switch (m.type) {
                case "click":
                    b.one(document).on("click",
                    function(a) {
                        for (a = b.getTarget(a); a && !a["_effect_" + h + "_"];) a = a.parentNode;
                        a ? e() : d()
                    });
                    break;
                case "hover":
                    a.hover(e, f);
                    this.hover(e, f);
                    break;
                case "focusBlur":
                    a.on("focus", e),
                    a.on("blur", f)
                }
                return this
            },
            html: function(a, c) {
                var b = "inner outer top bottom remove before after".split(" ");
                t(this);
                if (0 == arguments.length) return this[0] ? this[0].innerHTML: void 0;
                1 == arguments.length && "remove" != arguments[0] && (c = a, a = "inner");
                if (2 == arguments.length && !~b.indexOf(a)) return this;
                if ("remove" != a && c && void 0 !== c.each) {
                    if ("inner" == a) {
                        var d = document.createElement("p");
                        c.each(function(a) {
                            d.appendChild(a)
                        });
                        this.each(function(a) {
                            a.innerHTML = d.innerHTML
                        })
                    } else {
                        var e = this;
                        c.each(function(c) {
                            e.html(a, c)
                        })
                    }
                    return this
                }
                return this.each(function(b) {
                    var d, e = 0;
                    if ("inner" == a) if ("string" == typeof c || "number" == typeof c) {
                        b.innerHTML = c;
                        b = b.getElementsByTagName("SCRIPT");
                        for (d = b.length; e < d; e++) eval(b[e].text)
                    } else b.innerHTML = "",
                    b.appendChild(c);
                    else if ("remove" == a) V[a](b);
                    else if (e = X(c, -1 < ["outer", "top", "bottom"].toString().indexOf(a) ? b: b.parentNode), d = e.childNodes, V[a]) {
                        V[a](e, b);
                        for (b = e.parentNode; d.length;) b.insertBefore(d[0], e);
                        b.removeChild(e)
                    }
                })
            },
            browser: function(a, c) {
                if (a) {
                    var b = !0;
                    a !== J.name && (b = !1);
                    c && (a === J.name && c !== parseInt(J.version, 10)) && (b = !1);
                    return b
                }
                return J
            },
            parseTime: function(a, c, b) {
                w.hasCallOnce = !1;
                return w(a, c, b)
            },
            parseDate: function(a, c) {
                var g = b.parseTime(a, c, !0);
                return new Date(parseInt(g.y, 10), parseInt(g.m, 10) - 1, parseInt(g.d, 10), parseInt(g.h, 10), parseInt(g.mi, 10), parseInt(g.s, 10))
            },
            create: function(a) {
                var c = document.createElement("div"),
                b = [];
                fish.all(c).html(a);
                for (a = 0; a < c.childNodes.length; a++) 1 === c.childNodes[a].nodeType && b.push(c.childNodes[a]);
                return fish.all(b)
            }
        };
        "getBoundingClientRect" in document.documentElement ? F.offset = function(a) {
            var c, g = 0,
            d = 0;
            a && (c = b.one(a).offset());
            if ((a = this[0]) && a.getBoundingClientRect) {
                var e;
                try {
                    e = a.getBoundingClientRect();
                    var f = a.ownerDocument,
                    h = f.body,
                    l = f.documentElement,
                    k = l.clientLeft || h.clientLeft || 0,
                    n = null != a && a == a.window ? a: 9 === a.nodeType ? a.defaultView || a.parentWindow: !1,
                    g = e.top + (n.pageYOffset || J.boxModel && l.scrollTop || h.scrollTop) - (l.clientTop || h.clientTop || 0),
                    d = e.left + (n.pageXOffset || J.boxModel && l.scrollLeft || h.scrollLeft) - k
                } catch(s) {
                    d = g = 0
                }
            }
            return {
                top: c ? g - c.top: g,
                left: c ? d - c.left: d
            }
        }: (E(), F.offset = function(a) {
            var c;
            a && (c = b.one(a).offset());
            if (a = this[0]) {
                var g = a.offsetParent,
                d = a.ownerDocument,
                e, f = d.documentElement,
                h = d.body,
                l = d.defaultView;
                e = l ? l.getComputedStyle(a, null) : a.currentStyle;
                for (var d = a.offsetTop,
                k = a.offsetLeft; (a = a.parentNode) && (a !== h && a !== f) && !(E.supportsFixedPosition && "fixed" === e.position);) {
                    e = l ? l.getComputedStyle(a, null) : a.currentStyle;
                    d -= a.scrollTop;
                    k -= a.scrollLeft;
                    if (a === g) {
                        d += a.offsetTop;
                        k += a.offsetLeft;
                        if (E.doesNotAddBorder && (!E.doesAddBorderForTableAndCells || !/^t(able|d|h)$/i.test(a.nodeName))) d += parseFloat(e.borderTopWidth) || 0,
                        k += parseFloat(e.borderLeftWidth) || 0;
                        g = a.offsetParent
                    }
                    E.subtractsBorderForOverflowNotVisible && "visible" !== e.overflow && (d += parseFloat(e.borderTopWidth) || 0, k += parseFloat(e.borderLeftWidth) || 0)
                }
                if ("relative" === e.position || "static" === e.position) d += h.offsetTop,
                k += h.offsetLeft;
                E.supportsFixedPosition && "fixed" === e.position && (d += Math.max(f.scrollTop, h.scrollTop), k += Math.max(f.scrollLeft, h.scrollLeft))
            }
            return {
                top: c ? d - c.top: d,
                left: c ? k - c.left: k
            }
        }); ["width", "height"].forEach(function(a, c) {
            var b = c ? "Height": "Width";
            F[a] = function(a) {
                a = a ? this.dom(a) : this[0];
                var c;
                try {
                    if (a === M) {
                        var f = p.documentElement;
                        c = self["inner" + b] || f && f["client" + b] || p.body["client" + b]
                    } else if (a === p) c = p.body["scroll" + b];
                    else if ("none" !== (a.currentStyle ? a.currentStyle.display: p.defaultView.getComputedStyle(a, null).getPropertyValue("display"))) c = a["offset" + b] || a["client" + b];
                    else {
                        var h = a.style,
                        l = h.display;
                        h.display = "block";
                        c = a["offset" + b] || a["client" + b];
                        h.display = l
                    }
                } catch(k) {
                    c = 0
                }
                return c
            }
        });
        "click mouseover mouseout submit focus blur keydown keypress keyup change".split(" ").forEach(function(a, c) {
            F[a] = function(c) {
                return b.on(a, c)
            }
        }); ["next", "previous"].forEach(function(a) {
            var c = a + "Sibling";
            F[a] = function(a) {
                if (0 === this.length) return this;
                var d = b.admin.roe(),
                e = 0,
                f;
                d.length = 0;
                "string" === typeof a && ("" !== a && !/\s+/.test(a)) && (a = v(a));
                if (void 0 === a || !0 === a) f = b.isElement;
                else if ("function" === typeof a) f = function(c) {
                    return b.isElement(c) && a(c)
                };
                else return d;
                this.each(function(b, h) {
                    for (b = b[c]; b;) {
                        if (f(b)) {
                            for (var l = b,
                            k = 0; k < e && d[k] !== l; k++);
                            k === e && (d[e++] = l);
                            if (void 0 === a) break
                        }
                        b = b[c]
                    }
                });
                d.length = e;
                return d
            }
        });
        F.sibling = function(a) {
            var b = this.previous(a);
            a = this.next(a);
            for (var g = b.length,
            d = 0,
            e = a.length; d < e; d++) b[g++] = a[d];
            b.length = g;
            return b
        };
        F.children = function(a) {
            if (0 === this.length) return this;
            var c, g, d, e;
            if ("function" === typeof a) c = function(c) {
                return b.isElement(c) && a(c)
            };
            else if (void 0 === a) c = b.isElement;
            else {
                g = b.all(a, this[0]);
                d = 1;
                for (e = this.length; d < e; d++) g.add(b.all(a, this[d]));
                return g
            }
            g = b.admin.roe();
            var f = 0;
            this.each(function(a) {
                a = a.childNodes;
                d = 0;
                for (e = a.length; d < e; d++) c(a[d]) && (g[f++] = a[d])
            });
            g.length = f;
            return g
        };
        F.clone = function(a) {
            if (0 === this.length) return this;
            var c = fish.browser(),
            g,
            d = document.createDocumentFragment().appendChild(document.createElement("div"));
            g = "ms" == c.name && 9 > c.version ?
            function(b) {
                d.innerHTML = b.outerHTML.replace(RegExp("(^|\\s)" + D.hook + '="\\d+"'), "");
                b = d.firstChild;
                "function" === typeof a && a(b);
                d.removeChild(b);
                return b
            }: function(b) {
                b = b.cloneNode(!0);
                "function" === typeof a && a(b);
                return b
            };
            roe = b.admin.roe();
            var e = 0;
            this.each(function(a) {
                roe[e++] = g(a)
            });
            roe.length = e;
            return roe
        }; ["Left", "Top"].forEach(function(a, b) {
            var g = b ? "scrollTop": "scrollLeft";
            F["scroll" + a] = function(a) {
                if (a = a ? this.dom(a) : this[0]) return a = (elemN = a && "object" === typeof a && "setInterval" in a ? a: 9 === a.nodeType ? a.defaultView || a.parentWindow: !1) ? "pageXOffset" in elemN ? elemN[b ? "pageYOffset": "pageXOffset"] : J.boxModel && elemN.document.documentElement[g] || elemN.document.body[g] : a[g]
            }
        });
        fish.extend(F, !0);
        var H = /(opera)(?:.*version)?[ \/]([\w.]+)/,
        S = /(msie) ([\w.]+)/,
        T = /(mozilla)(?:.*? rv:([\w.]+))?/,
        Q = navigator.userAgent.toLowerCase(),
        H = /(webkit)[ \/]([\w.]+)/.exec(Q) || H.exec(Q) || S.exec(Q) || 0 > Q.indexOf("compatible") && T.exec(Q) || [];
        H[1] = H[1].replace("msie", "ms").replace("mozilla", "moz").replace("opera", "o");
        H[2] = parseFloat(H[2], 10);
        var J = {
            name: H[1] || "",
            version: H[2] && parseFloat(H[2]) || 0,
            boxModel: !1
        };
        b.ready && b.ready(function() {
            var a = document.createElement("div");
            a.style.width = a.style.paddingLeft = "1px";
            document.body.appendChild(a);
            J.boxModel = 2 === a.offsetWidth;
            a.parentNode.removeChild(a)
        })
    })(); (function() {
        function b(f, k, n) {
            return ("string" === typeof k ? k: k.toString()).replace(f.define || p,
            function(b, f, h, k) {
                0 === f.indexOf("def.") && (f = f.substring(4));
                f in n || (n[f] = ":" === h ? k: (new Function("def", "return " + k))(n));
                return ""
            }).replace(f.use || p,
            function(k, p) {
                if ("def.temp" === p) throw Error("forbin def.temp in template");
                var q;
                return (q = 0 === p.indexOf("def.") ? n[p.substring(4)] : eval(p)) ? b(f, q, n) : q
            })
        }
        function f(b) {
            return b.replace(/\\('|\\)/g, "$1").replace(/[\r\t\n]/g, " ")
        }
        var n = {
            version: "0.2.0",
            templateSettings: {
                evaluate: /\{\{([\s\S]+?)\}\}/g,
                interpolate: /\{\{=([\s\S]+?)\}\}/g,
                encode: /\{\{!([\s\S]+?)\}\}/g,
                use: /\{\{#([\s\S]+?)\}\}/g,
                define: /\{\{##\s*([\w\.$]+)\s*(\:|=)([\s\S]+?)#\}\}/g,
                conditional: /\{\{\?(\?)?\s*([\s\S]*?)\s*\}\}/g,
                iterate: /\{\{~\s*(?:\}\}|([\s\S]+?)\s*\:\s*([\w$]+)\s*(?:\:\s*([\w$]+))?\s*\}\})/g,
                varname: "it",
                strip: !0,
                append: !0,
                selfcontained: !1
            },
            cache: {},
            template: void 0
        },
        q = {
            start: "'+(",
            end: ")+'",
            startencode: "'+fish.encodeHTML("
        },
        k = {
            start: "';out+=(",
            end: ");out+='",
            startencode: "';out+=fish.encodeHTML("
        },
        p = /$^/;
        n.template = function(h, u) {
            var s = n.templateSettings,
            y, x, z = s.append ? q: k,
            v,
            w = 0,
            t;
            if (u) {
                if (v = b(s, h, u), !(x = n.cache[v])) y = v
            } else if (! (x = n.cache[h])) y = h,
            v = b(s, h, {});
            x || (v = ("var out='" + (s.strip ? v.replace(/(^|\r|\n)\t* +| +\t*(\r|\n|$)/g, " ").replace(/\r|\n|\t|\/\*[\s\S]*?\*\//g, "") : v).replace(/'|\\/g, "\\$&").replace(s.interpolate || p,
            function(b, h) {
                return z.start + f(h) + z.end
            }).replace(s.encode || p,
            function(b, h) {
                return z.startencode + f(h) + z.end
            }).replace(s.conditional || p,
            function(b, h, k) {
                return h ? k ? "';}else if(" + f(k) + "){out+='": "';}else{out+='": k ? "';if(" + f(k) + "){out+='": "';}out+='"
            }).replace(s.iterate || p,
            function(b, h, k, l) {
                if (!h) return "';} } out+='";
                w += 1;
                t = l || "i" + w;
                h = f(h);
                return "';var arr" + w + "=" + h + ";if(arr" + w + "){var " + k + "," + t + "=-1,l" + w + "=arr" + w + ".length-1;while(" + t + "<l" + w + "){" + k + "=arr" + w + "[" + t + "+=1];out+='"
            }).replace(s.evaluate || p,
            function(b, h) {
                return "';" + f(h) + "out+='"
            }) + "';return out;").replace(/\n/g, "\\n").replace(/\t/g, "\\t").replace(/\r/g, "\\r").replace(/(\s|;|}|^|{)out\+='';/g, "$1").replace(/\+''/g, "").replace(/(\s|;|}|^|{)out\+=''\+/g, "$1out+="));
            try {
                return x || (x = new Function(s.varname, v), n.cache[y] = x),
                x
            } catch(G) {
                throw "undefined" !== typeof console && console.log("Could not create a template function: " + v),
                G;
            }
        };
        fish.extend({
            template: function(b, f) {
                var k = b.temp;
                if ("string" === typeof b) return f ? n.template(b)(f) : n.template(b);
                if ("object" === typeof b) return fish.lang.extend(n.templateSettings, b),
                f ? n.template(k, b)(f) : n.template(k, b)
            },
            encodeHTML: function() {
                var b = {
                    "&": "&#38;",
                    "<": "&#60;",
                    ">": "&#62;",
                    '"': "&#34;",
                    "'": "&#39;",
                    "/": "&#47;"
                },
                f = /&(?!#?\w+;)|<|>|"|'|\//g;
                return function(k) {
                    return k ? k.toString().replace(f,
                    function(f) {
                        return b[f] || f
                    }) : k
                }
            } ()
        },
        !0)
    })()
})(document, window);
fish.admin.config({
    mFix: {
        v: "0.1.1",
        g: 13082101
    },
    memberLevel: {
        v: "1.0",
        css: 1,
        g: 14040715
    },
    mCitySelect: {
        v: "1.0",
        g: 14040715
    },
    anim: {
        v: "0.3",
        g: 13121201
    },
    mNotice: {
        v: "0.4.2",
        css: 1,
        g: 13082101
    },
    autoComplete: {
        v: "0.4.4",
        css: 1,
        g: 13121801
    },
    mCal: {
        v: "1.1.4",
        css: 1,
        g: 13112801
    },
    Calendar: {
        v: "0.2",
        css: 1,
        g: 14050501
    },
    mSlider: {
        v: "0.4.2",
        css: 1,
        g: 13082101
    },
    mPage: {
        v: "0.5",
        css: 1,
        g: 13082101
    },
    mPop: {
        v: "0.2.4",
        css: 1,
        g: 13102901
    },
    mLogin: {
        v: "1.0",
        css: 1,
        g: 14040715
    },
    template: {
        v: "0.2",
        g: 13082101
    },
    lazyLoad: {
        v: "0.2",
        g: 1404171558
    },
    mTab: {
        v: "0.4.2",
        g: 13112701
    },
    MD5: {
        v: "0.1",
        g: 13082101
    },
    mPlaceholder: {
        v: "0.1",
        g: 13082101
    },
    mSerialize: {
        v: "0.1",
        g: 13082101
    },
    recommend: {
        v: "0.1",
        css: 1,
        g: 13121801
    }
});